#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

#define High 50
#define Width 80

//函数外全局变量定义

int cells[High][Width];

void gotoxy(int x, int y)
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(handle, pos);
}

void HideCursor()
{
	CONSOLE_CURSOR_INFO cursor_info = { 1,0 };//第二个值为0表示隐藏光标
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

void startup()						//数据初始化
{
	int i, j;
	for (i = 0; i < High ;i++)
		for (j = 0; j < Width;j++)
			cells[i][j] = rand()%2;

	HideCursor(); //隐藏光标
}

void show()    //显示画面
{
	gotoxy(0, 0);					//光标移动到原点
	int i, j;
	for (i = 0; i < High; i++)
	{
		for(j = 0;j < Width; j++)
		{
			if (cells[i][j] == 1)
				printf("*");
			else
				printf(" ");
		}
		printf("\n");
	}
}

void updateWithoutInput()		//与用户输入无关的更新
{
	int i, j;
	int tempcells[High][Width];	//临时存储的数组

	for (i = 0; i < High; i++)
		for (j = 0; j < Width; j++)
			tempcells[i][j] = cells[i][j];

	int NeibourNumber = 0;

	for (i = 1; i < High - 1; i++)
	{
		for (j = 1; j < Width - 1; j++)
		{
			NeibourNumber = cells[i - 1][j - 1] + cells[i - 1][j] + cells[i - 1][j + 1]
							+ cells[i][j - 1] + cells[i][j] + cells[i][j + 1]
							+ cells[i + 1][j - 1] + cells[i + 1][j] + cells[i + 1][j + 1];
			if (NeibourNumber == 3)
				tempcells[i][j] = 1;
			else if (NeibourNumber == 2)
				tempcells[i][j] = cells[i][j];
			else
				tempcells[i][j] = 0;
		}
	}

	for (i = 1; i < High; i++)
		for (j = 1; j < Width; j++)
			cells[i][j] = tempcells[i][j];

	Sleep(150);
}
void updateWithInput()			//与用户输入有关的更新
{

}

int main()
{
	startup();
	while (1)
	{
		show();					//显示画面
		updateWithoutInput();	//与用户输入无关的更新
		updateWithInput();		//与用户输入有关的更新
	}
	return 0;
}